package ca.etsmtl.log120.tp1.lists;

import java.util.ListIterator;

import ca.etsmtl.log120.tp1.shapehierarchy.AbstractShape;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #2
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY16079108
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : Oval.java
Date cree : 2011-05-18
Date dern. modif. 2015-05-23
 *************************************************** ****
Historique des modifications
 *************************************************** ****
2011-05-18 Version initiale (Nicolas Blais Miko)
2011-05-24 Implementation de drawShape() (Yohan Trepanier)
 ***************************************************/

/**
 * Classe iterateur de la liste
 */
public class MonIterateur<T> implements ListIterator<AbstractShape>{

	private ShapeLinkedList list; //La liste que l'on veut parcourir
	private int indice; //La position de l'iterateur dans la liste

	/**
	 * Constructeur de l'iterateur d'une liste
	 * @param list La liste pous laquelle on veut un iterateur
	 */
	public MonIterateur(ShapeLinkedList list){

		this.list = list;
		indice = -1;
	}

	/**
	 * Methode permettant d'ajouter une forme a la liste 
	 * @param shape La forme a ajouter
	 */
	@Override
	public void add(AbstractShape shape) {
		list.add(shape);
	}

	/**
	 * Methode qui verifie si la liste a un prochain element suivant celui a l'indice courant
	 */
	@Override
	public boolean hasNext() {
		list.nextExists(indice);
		return false;
	}

	/**
	 * Methode qui verifie si la liste a un prochain element precedent l'indice courant
	 */
	@Override
	public boolean hasPrevious() {
		System.out.println("MonIterateur:hasPrevious");
		return false;
	}

	/**
	 * Methode qui retourne la forme a l'indice courant et qui increment l'indice courant
	 */
	@Override
	public AbstractShape next() {
		AbstractShape tmp = list.get(indice);
		indice++;
		return tmp;
	}

	/**
	 * Methode qui incrment l'indice courant
	 */
	@Override
	public int nextIndex() {
		return indice + 1;
	}

	@Override
	public AbstractShape previous() {
		// AbstractShapeODO Auto-generated method stub
		return null;
	}

	@Override
	public int previousIndex() {
		// AbstractShapeODO Auto-generated method stub
		return 0;
	}

	@Override
	public void remove() {
		// AbstractShapeODO Auto-generated method stub

	}

	/**
	 * Methode qui remplace la forme a l'indice courant par la forme recue en parametre
	 */
	@Override
	public void set(AbstractShape shape) {
		list.replace(indice, shape);
	}


}
